package one.chapter_3;

/**
 * 有序符号表
 */
public interface SeqST<Key extends Comparable<Key>,Value>  extends ST<Key,Value>{

    /**
     * 最小的键
     * @return
     */
    Key min();

    Key max();
    /**
     * 小于等于key的最大键
     * @return
     */
    Key floor(Key key);
    /**
     * 大于等于key的最小键
     * @return
     */
    Key ceiling(Key key);

    /**
     * 小于key的键的数量
     * @param key
     * @return
     */
    int rank(Key key);

    /**
     * 排名为k的键
     * @param k
     * @return
     */
    Key select(int k);

    void deleteMin();

    void deleteMax();

    /**
     * [lo..hi]之间键的数量
     * @param lo
     * @param hi
     * @return
     */
    int size(Key lo,Key hi);
    /**
     * [lo..hi]之间的所有键
     * @param lo
     * @param hi
     * @return
     */
    Iterable<Key> keys(Key lo,Key hi);
}
